package com.boarsoft.boar.dir;

import java.util.List;

import com.boarsoft.bean.ReplyInfo;
import com.boarsoft.boar.entity.DirInfo;
import com.boarsoft.common.dao.PagedResult;

public interface DirBiz {
	/**
	 * 查询列出某个目录（公司、部门、系统/工程）下的内容
	 *
	 * @param parentId
	 * @return List<DirInfo>
	 */
	List<DirInfo> list(String parentId);

	/**
	 * 查询列出某个目录（公司、部门、系统/工程）下的内容
	 *
	 * @param parentId
	 * @param types
	 *            要包括的节点类型
	 * @return List<DirInfo>
	 */
	// List<DirInfo> list(String parentId, String types);

	/**
	 * 查询节点
	 *
	 * @param parentId
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return PagedResult<DirInfo>
	 */
	PagedResult<DirInfo> list(String parentId, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 查询节点
	 *
	 * @param id
	 * @param type
	 * @param key
	 * @param orderBy
	 * @param pageNo
	 * @param pageSize
	 * @return PagedResult<DirInfo>
	 */
	PagedResult<DirInfo> listSys(String id, short type, String key, String orderBy, int pageNo, int pageSize);

	/**
	 * 1、取上级目录的level+1<br>
	 * 2、将上级目录的childCount+1
	 *
	 * @param d
	 * @return
	 */
	ReplyInfo<Object> add(DirInfo d);

	/**
	 * 修改某个目录 此方法需判断code是否改变，一旦改变，需修改子节点的path
	 *
	 * @param o
	 * @return ReplyInfo<Object>
	 */
	ReplyInfo<Object> update(DirInfo o);

	/**
	 * 启用应用、系统
	 *
	 * @param id
	 * @return boolean
	 */
	boolean start(String id);

	/**
	 * 停用应用、系统
	 *
	 * @param id
	 * @return boolean
	 */
	boolean stop(String id);

	/**
	 * 删除某个目录
	 *
	 * @param id
	 * @throws Exception
	 */
	void delete(String id) throws Exception;

	/**
	 * 获取某个节点
	 *
	 * @param id
	 * @return
	 */
	DirInfo get(String id);

	/**
	 * @param p
	 * @return
	 */
	List<DirInfo> listByPath(String p);

	/**
	 * 拷贝指定ID的树节点到指定的目录（parent）下
	 * 
	 * @param od
	 *            被复制的节点
	 * @param to
	 *            目标位置的父节点
	 * @return
	 * @throws Exception
	 */
	DirInfo copy(DirInfo od, String to) throws Exception;

	/**
	 * 移动指定ID的树节点到指定的目录（parent）下
	 * 
	 * @param od
	 *            被移动的节点
	 * @param to
	 *            目标位置的父节点
	 * @return
	 */
	boolean move(DirInfo od, String to) throws Exception;

	void delete(DirInfo o) throws Exception;

	/**
	 * 从指定节点向上查找指定类型的节点ID
	 * 
	 * @param id
	 *            指定节点ID
	 * @param type
	 * @return
	 */
	String lookup(DirInfo pd, short type);

	/**
	 * 在某个节点的所有子孙节点中查找指定的节点
	 * 
	 * @param ancestorId
	 * @param type
	 * @return
	 */
	List<DirInfo> list(String ancestorId, short type);
}